package com.deer.wms.ASN.manage.service;

import com.deer.wms.ASN.manage.model.asn.AsnData;
import com.deer.wms.ASN.manage.model.asn.AsnMaster;
import com.deer.wms.ASN.manage.model.asn.AsnMasterCriteria;
import com.deer.wms.ASN.manage.model.asn.AsnMasterDto;
import com.deer.wms.ASN.manage.model.asn.CreateASN.CreateASN;
import com.deer.wms.base.system.model.BillOutBO;
import com.deer.wms.intercept.common.data.CurrentUser;
import com.deer.wms.project.root.service.SuperService;

import java.util.List;
import java.util.Map;


/**
 * @author guo
 * @since 2020/01/03
 */
public interface AsnMasterService extends SuperService<AsnMaster> {

    /**
     * 通过criteria条件查询
     * @param criteria criteria
     * @return List<AsnMasterDto>
     */
    List<AsnMasterDto> findList(AsnMasterCriteria criteria);

    List<AsnMasterDto> findPdaList(AsnMasterCriteria criteria);




    /**
     * 通过单据号删除
     * @param billNo 单据号
     */
    void deleteByBillNo(String billNo);

    /**
     * 通过采购单号删除
     * @param requestBuyBillNo 采购单号
     */
    void deleteByRequestBuyNo(String requestBuyBillNo);

    /**
     * 关闭入库任务及其明细
     * @param id 任务号ID
     */
    void closeById(Integer id);

    /**
     * WEB新增入库单
     * @param asnData 新增数据
     * @param currentUser 当前用户
     */
    void createAsnMaster(AsnData asnData, CurrentUser currentUser);

    void createFile(String billNo, CurrentUser currentUser);

    void createASN(CreateASN createASN, CurrentUser currentUser);

    AsnMasterDto findByBillNo(String billNo);

    AsnMaster findSoByBillNo(String billNo, String wareCode);

    AsnMaster findBy(String field, String value);

    //从erp抓取出采购入库单信息数据
    void savePurchaseOrder(Map<String,Object> map);

    /**
     * WEB新增先发配件入库信息
     * @param asnData 新增数据
     * @param currentUser 当前用户
     */
    void createAsnMaster2(AsnData asnData, CurrentUser currentUser);

    /**
     * 通过criteria条件查询先发配件入库信息
     * @param criteria criteria
     * @return List<AsnMasterDto>
     */
    List<AsnMasterDto> findList2(AsnMasterCriteria criteria);

    /**
     * 通过criteria条件查询需要质检的单据
     * @param criteria
     * @return
     */
    List<AsnMasterDto> findQcList(AsnMasterCriteria criteria);

    void updateQcState(String billNo, int qcState);

    /**
     * 出库单据到入库
     * @param billOutDetailBOList
     */
    void saveOrder(List<BillOutBO> boList);


    /**
     * 回传ERP事务
     * @param asnMaster
     * @param cellCode
     * @param currentUser
     */
    void accomplish(AsnMaster asnMaster, String cellCode, CurrentUser currentUser);

    /**
     * asn通知单查询
     * @param hashMap 条件
     * @param wareId 仓库
     */
    void addAsnNoticeOf(Map<String, String> hashMap);

    /**
     * 销售退货申请单查询接口
     * @param hashMap 条件
     */
    void addSalesReturn(Map<String, Object> hashMap);

    /**
     * 生产退料申请单查询接口
     * @param hashMap 条件
     */
    void addProductionMaterialReturn(Map<String, Object> hashMap);

    /**
     * 生产订单完工查询接口
     * @param hashMap
     */
    void addCompletionProductionOrder(Map<String, Object> hashMap);


    /**
     * 委外退料
     * @param hashMap
     */
    void getOutSourceBillNo(Map<String,Object> hashMap);

    /**
     * 委外收货
     * @param hashMap
     */
    void queryOtherIn(Map<String, Object> hashMap);

    /**
     * 卓品  同步ERP的所有入库任务
     * @param hashMap
     */
    void saveInTaskByERP(Map<String, String> hashMap);

    /**
     * 通过单号去更新采购订单
     * @param asnMaster
     */
    void updateErp(AsnMaster asnMaster);
}
